package stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class StreamDemo6 {
    /*
     归约(reduce)
     多个结果和为一个结果就是归约。

	归约，也称缩减，顾名思义，是把一个流缩减成一个值，能实现对集合求和、求乘积和求最值操作。

     */
    public static void main(String[] args) {
        //创建集合
        List<Integer> list = Arrays.asList(11,12,13,14,15);

        //求和，乘积 还有最大值
        Integer sum = list.stream().reduce( (a, b) -> a + b).get();
        System.out.println("第一种和为：" + sum);
        System.out.println("第二种和为：" + list.stream().reduce(Integer::sum).get());
        System.out.println("第三种和为：" + list.stream().reduce(0, Integer::sum));//0是初始值
        Integer product = list.stream().reduce( (a, b) -> a * b).get();
        Integer product1 = list.stream().reduce(0, (a, b) -> a * b);//0是初始值最后会乘0
        System.out.println("积为：" + product);
        System.out.println("积为：" + product1);
        Integer max = list.stream().reduce( (a, b) -> a > b ? a : b).get();
        System.out.println("最大值为：" + max);
        Integer min = list.stream().reduce( (a, b) -> a < b ? a : b).get();
        System.out.println("最小值为：" + min);
        // 求最大值
        Integer integer5 = list.stream().reduce((a, b) -> a > b ? a : b).get();
        System.out.println("最大值为：" + integer5);
        //方式2
        Integer integer6 = list.stream().reduce(Integer::max).get();
        System.out.println("最大值为：" + integer6);
        // 求最小值
        Integer integer7 = list.stream().reduce((a, b) -> a < b ? a : b).get();
        System.out.println("最小值为：" + integer7);
        //方式2
        Integer integer8 = list.stream().reduce(Integer::min).get();
        System.out.println("最小值为：" + integer8);
    }

}
